{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# SVM on Pima Indians Diabetes Data Set\n",
    "\n",
    "数据说明：\n",
    "Pima Indians Diabetes Data Set（皮马印第安人糖尿病数据集） 根据现有的医疗信息预测5年内皮马印第安人糖尿病发作的概率。   \n",
    "\n",
    "数据集共9个字段: \n",
    "0列为怀孕次数；\n",
    "1列为口服葡萄糖耐量试验中2小时后的血浆葡萄糖浓度；\n",
    "2列为舒张压（单位:mm Hg）\n",
    "3列为三头肌皮褶厚度（单位：mm）\n",
    "4列为餐后血清胰岛素（单位:mm）\n",
    "5列为体重指数（体重（公斤）/ 身高（米）^2）\n",
    "6列为糖尿病家系作用\n",
    "7列为年龄\n",
    "8列为分类变量（0或1）\n",
    "\n",
    "数据链接：https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 首先 import 必要的模块\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "#竞赛的评价指标为logloss\n",
    "from sklearn.metrics import log_loss  \n",
    "\n",
    "#SVM并不能直接输出各类的概率，所以在这个例子中我们用正确率作为模型预测性能的度量\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "#input data\n",
    "train = pd.read_csv(\"FE_pima-indians-diabetes_std.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#  get labels\n",
    "y_train = train['Target']   \n",
    "X_train = train.drop([\"Target\"], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型训练\n",
    "由于速度较慢，这里只调整了超参数C，没调L1/L2正则函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7669270833333334\n",
      "{'C': 0.01}\n"
     ]
    }
   ],
   "source": [
    "#线性SVM\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "param_grid = {'C': Cs}\n",
    "grid = GridSearchCV(SVC(kernel='linear'), param_grid, cv=5, n_jobs = 4)\n",
    "\n",
    "grid.fit(X_train, y_train)\n",
    "print(grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "大家可以对比一下用原始数据（标准化，但不做缺失值填补，即缺失值取0），效果更好。\n",
    "SVM对噪声比较敏感（或许原始数据清洗的时候已经是上帝最好的安排了:) ）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### RBF核SVM正则参数调优\n",
    "\n",
    "RBF核是SVM最常用的核函数。\n",
    "RBF核SVM 的需要调整正则超参数包括C（正则系数，一般在log域（取log后的值）均匀设置候选参数）和核函数的宽度gamma\n",
    "C越小，决策边界越平滑； \n",
    "gamma越小，决策边界越平滑。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise-deprecating',\n",
       "       estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n",
       "  decision_function_shape='ovr', degree=3, gamma='auto_deprecated',\n",
       "  kernel='rbf', max_iter=-1, probability=False, random_state=None,\n",
       "  shrinking=True, tol=0.001, verbose=False),\n",
       "       fit_params=None, iid='warn', n_jobs=4,\n",
       "       param_grid={'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000], 'gamma': [0.0001, 0.001, 0.01, 0.1, 1]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring=None, verbose=0)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.svm import SVC\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "gammas = [0.0001,0.001, 0.01, 0.1, 1]\n",
    "#gammas =[1e-5, 1e-6]\n",
    "param_grid = {'C': Cs, 'gamma' : gammas}\n",
    "grid = GridSearchCV(SVC(kernel='rbf'), param_grid, cv=5, n_jobs = 4)\n",
    "\n",
    "grid.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7682291666666666\n",
      "{'C': 100, 'gamma': 0.001}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(grid.best_score_)\n",
    "print(grid.best_params_)\n",
    "\n",
    "# plot CV误差曲线\n",
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_gamms = len(gammas)\n",
    "\n",
    "test_scores =  np.array(test_means).reshape(n_Cs,number_gamms)\n",
    "#train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_gamms)\n",
    "#train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(gammas):\n",
    "    pyplot.plot(x_axis, test_scores[:,i], label= gammas[i])\n",
    "    pyplot.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = gammas[i] )\n",
    "    #pyplot.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuary' )\n",
    "pyplot.savefig('SVMGridSearchCV_C.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# C越大，最佳的gamma越小"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
